0 CpxTRS
↳1 TrsToWeightedTrsProof (BOTH BOUNDS(ID, ID), 0 ms)
↳2 CpxWeightedTrs
↳3 TypeInferenceProof (BOTH BOUNDS(ID, ID), 0 ms)
↳4 CpxTypedWeightedTrs
↳5 CompletionProof (UPPER BOUND(ID), 0 ms)
↳6 CpxTypedWeightedCompleteTrs
↳7 NarrowingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳8 CpxTypedWeightedCompleteTrs
↳9 CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID), 0 ms)
↳10 CpxRNTS
↳11 SimplificationProof (BOTH BOUNDS(ID, ID), 0 ms)
↳12 CpxRNTS
↳13 CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID), 0 ms)
↳14 CpxRNTS
↳15 IntTrsBoundProof (UPPER BOUND(ID), 364 ms)
↳16 CpxRNTS
↳17 IntTrsBoundProof (UPPER BOUND(ID), 66 ms)
↳18 CpxRNTS
↳19 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳20 CpxRNTS
↳21 IntTrsBoundProof (UPPER BOUND(ID), 499 ms)
↳22 CpxRNTS
↳23 IntTrsBoundProof (UPPER BOUND(ID), 173 ms)
↳24 CpxRNTS
↳25 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳26 CpxRNTS
↳27 IntTrsBoundProof (UPPER BOUND(ID), 822 ms)
↳28 CpxRNTS
↳29 IntTrsBoundProof (UPPER BOUND(ID), 8 ms)
↳30 CpxRNTS
↳31 FinalProof (⇔, 0 ms)
↳32 BOUNDS(1, n^2)
plus_x#1(0, x8) → x8
plus_x#1(S(x12), x14) → S(plus_x#1(x12, x14))
map#2(plus_x(x2), Nil) → Nil
map#2(plus_x(x6), Cons(x4, x2)) → Cons(plus_x#1(x6, x4), map#2(plus_x(x6), x2))
main(x5, x12) → map#2(plus_x(x12), x5)
plus_x#1(0, x8) → x8 [1]
plus_x#1(S(x12), x14) → S(plus_x#1(x12, x14)) [1]
map#2(plus_x(x2), Nil) → Nil [1]
map#2(plus_x(x6), Cons(x4, x2)) → Cons(plus_x#1(x6, x4), map#2(plus_x(x6), x2)) [1]
main(x5, x12) → map#2(plus_x(x12), x5) [1]
plus_x#1(0, x8) → x8 [1]
plus_x#1(S(x12), x14) → S(plus_x#1(x12, x14)) [1]
map#2(plus_x(x2), Nil) → Nil [1]
map#2(plus_x(x6), Cons(x4, x2)) → Cons(plus_x#1(x6, x4), map#2(plus_x(x6), x2)) [1]
main(x5, x12) → map#2(plus_x(x12), x5) [1]
plus_x#1 :: 0:S → 0:S → 0:S 0 :: 0:S S :: 0:S → 0:S map#2 :: plus_x → Nil:Cons → Nil:Cons plus_x :: 0:S → plus_x Nil :: Nil:Cons Cons :: 0:S → Nil:Cons → Nil:Cons main :: Nil:Cons → 0:S → Nil:Cons |
(a) The obligation is a constructor system where every type has a constant constructor,
(b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols:
plus_x#1
map#2
main
const
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
0 => 0
Nil => 0
const => 0
main(z, z') -{ 1 }→ map#2(1 + x12, x5) :|: x5 >= 0, x12 >= 0, z = x5, z' = x12
map#2(z, z') -{ 1 }→ 0 :|: z = 1 + x2, x2 >= 0, z' = 0
map#2(z, z') -{ 1 }→ 1 + plus_x#1(x6, x4) + map#2(1 + x6, x2) :|: x4 >= 0, z = 1 + x6, z' = 1 + x4 + x2, x6 >= 0, x2 >= 0
plus_x#1(z, z') -{ 1 }→ x8 :|: x8 >= 0, z = 0, z' = x8
plus_x#1(z, z') -{ 1 }→ 1 + plus_x#1(x12, x14) :|: z = 1 + x12, x12 >= 0, x14 >= 0, z' = x14
main(z, z') -{ 1 }→ map#2(1 + z', z) :|: z >= 0, z' >= 0
map#2(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0
map#2(z, z') -{ 1 }→ 1 + plus_x#1(z - 1, x4) + map#2(1 + (z - 1), x2) :|: x4 >= 0, z' = 1 + x4 + x2, z - 1 >= 0, x2 >= 0
plus_x#1(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus_x#1(z, z') -{ 1 }→ 1 + plus_x#1(z - 1, z') :|: z - 1 >= 0, z' >= 0
{ plus_x#1 } { map#2 } { main } |
main(z, z') -{ 1 }→ map#2(1 + z', z) :|: z >= 0, z' >= 0
map#2(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0
map#2(z, z') -{ 1 }→ 1 + plus_x#1(z - 1, x4) + map#2(1 + (z - 1), x2) :|: x4 >= 0, z' = 1 + x4 + x2, z - 1 >= 0, x2 >= 0
plus_x#1(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus_x#1(z, z') -{ 1 }→ 1 + plus_x#1(z - 1, z') :|: z - 1 >= 0, z' >= 0
main(z, z') -{ 1 }→ map#2(1 + z', z) :|: z >= 0, z' >= 0
map#2(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0
map#2(z, z') -{ 1 }→ 1 + plus_x#1(z - 1, x4) + map#2(1 + (z - 1), x2) :|: x4 >= 0, z' = 1 + x4 + x2, z - 1 >= 0, x2 >= 0
plus_x#1(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus_x#1(z, z') -{ 1 }→ 1 + plus_x#1(z - 1, z') :|: z - 1 >= 0, z' >= 0
plus_x#1: runtime: ?, size: O(n1) [z + z'] |
main(z, z') -{ 1 }→ map#2(1 + z', z) :|: z >= 0, z' >= 0
map#2(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0
map#2(z, z') -{ 1 }→ 1 + plus_x#1(z - 1, x4) + map#2(1 + (z - 1), x2) :|: x4 >= 0, z' = 1 + x4 + x2, z - 1 >= 0, x2 >= 0
plus_x#1(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus_x#1(z, z') -{ 1 }→ 1 + plus_x#1(z - 1, z') :|: z - 1 >= 0, z' >= 0
plus_x#1: runtime: O(n1) [1 + z], size: O(n1) [z + z'] |
main(z, z') -{ 1 }→ map#2(1 + z', z) :|: z >= 0, z' >= 0
map#2(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0
map#2(z, z') -{ 1 + z }→ 1 + s' + map#2(1 + (z - 1), x2) :|: s' >= 0, s' <= 1 * (z - 1) + 1 * x4, x4 >= 0, z' = 1 + x4 + x2, z - 1 >= 0, x2 >= 0
plus_x#1(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus_x#1(z, z') -{ 1 + z }→ 1 + s :|: s >= 0, s <= 1 * (z - 1) + 1 * z', z - 1 >= 0, z' >= 0
plus_x#1: runtime: O(n1) [1 + z], size: O(n1) [z + z'] |
main(z, z') -{ 1 }→ map#2(1 + z', z) :|: z >= 0, z' >= 0
map#2(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0
map#2(z, z') -{ 1 + z }→ 1 + s' + map#2(1 + (z - 1), x2) :|: s' >= 0, s' <= 1 * (z - 1) + 1 * x4, x4 >= 0, z' = 1 + x4 + x2, z - 1 >= 0, x2 >= 0
plus_x#1(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus_x#1(z, z') -{ 1 + z }→ 1 + s :|: s >= 0, s <= 1 * (z - 1) + 1 * z', z - 1 >= 0, z' >= 0
plus_x#1: runtime: O(n1) [1 + z], size: O(n1) [z + z'] map#2: runtime: ?, size: O(n2) [z·z' + z' + z'2] |
main(z, z') -{ 1 }→ map#2(1 + z', z) :|: z >= 0, z' >= 0
map#2(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0
map#2(z, z') -{ 1 + z }→ 1 + s' + map#2(1 + (z - 1), x2) :|: s' >= 0, s' <= 1 * (z - 1) + 1 * x4, x4 >= 0, z' = 1 + x4 + x2, z - 1 >= 0, x2 >= 0
plus_x#1(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus_x#1(z, z') -{ 1 + z }→ 1 + s :|: s >= 0, s <= 1 * (z - 1) + 1 * z', z - 1 >= 0, z' >= 0
plus_x#1: runtime: O(n1) [1 + z], size: O(n1) [z + z'] map#2: runtime: O(n2) [1 + z·z' + z'], size: O(n2) [z·z' + z' + z'2] |
main(z, z') -{ 2 + 2·z + z·z' }→ s1 :|: s1 >= 0, s1 <= 1 * ((1 + z') * z) + 1 * (z * z) + 1 * z, z >= 0, z' >= 0
map#2(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0
map#2(z, z') -{ 2 + x2 + x2·z + z }→ 1 + s' + s'' :|: s'' >= 0, s'' <= 1 * ((1 + (z - 1)) * x2) + 1 * (x2 * x2) + 1 * x2, s' >= 0, s' <= 1 * (z - 1) + 1 * x4, x4 >= 0, z' = 1 + x4 + x2, z - 1 >= 0, x2 >= 0
plus_x#1(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus_x#1(z, z') -{ 1 + z }→ 1 + s :|: s >= 0, s <= 1 * (z - 1) + 1 * z', z - 1 >= 0, z' >= 0
plus_x#1: runtime: O(n1) [1 + z], size: O(n1) [z + z'] map#2: runtime: O(n2) [1 + z·z' + z'], size: O(n2) [z·z' + z' + z'2] |
main(z, z') -{ 2 + 2·z + z·z' }→ s1 :|: s1 >= 0, s1 <= 1 * ((1 + z') * z) + 1 * (z * z) + 1 * z, z >= 0, z' >= 0
map#2(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0
map#2(z, z') -{ 2 + x2 + x2·z + z }→ 1 + s' + s'' :|: s'' >= 0, s'' <= 1 * ((1 + (z - 1)) * x2) + 1 * (x2 * x2) + 1 * x2, s' >= 0, s' <= 1 * (z - 1) + 1 * x4, x4 >= 0, z' = 1 + x4 + x2, z - 1 >= 0, x2 >= 0
plus_x#1(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus_x#1(z, z') -{ 1 + z }→ 1 + s :|: s >= 0, s <= 1 * (z - 1) + 1 * z', z - 1 >= 0, z' >= 0
plus_x#1: runtime: O(n1) [1 + z], size: O(n1) [z + z'] map#2: runtime: O(n2) [1 + z·z' + z'], size: O(n2) [z·z' + z' + z'2] main: runtime: ?, size: O(n2) [2·z + z·z' + z2] |
main(z, z') -{ 2 + 2·z + z·z' }→ s1 :|: s1 >= 0, s1 <= 1 * ((1 + z') * z) + 1 * (z * z) + 1 * z, z >= 0, z' >= 0
map#2(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0
map#2(z, z') -{ 2 + x2 + x2·z + z }→ 1 + s' + s'' :|: s'' >= 0, s'' <= 1 * ((1 + (z - 1)) * x2) + 1 * (x2 * x2) + 1 * x2, s' >= 0, s' <= 1 * (z - 1) + 1 * x4, x4 >= 0, z' = 1 + x4 + x2, z - 1 >= 0, x2 >= 0
plus_x#1(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus_x#1(z, z') -{ 1 + z }→ 1 + s :|: s >= 0, s <= 1 * (z - 1) + 1 * z', z - 1 >= 0, z' >= 0
plus_x#1: runtime: O(n1) [1 + z], size: O(n1) [z + z'] map#2: runtime: O(n2) [1 + z·z' + z'], size: O(n2) [z·z' + z' + z'2] main: runtime: O(n2) [2 + 2·z + z·z'], size: O(n2) [2·z + z·z' + z2] |